package com.helloandroid.uitween

import android.view.View

abstract  class UITween {

    var end = false  //  当前 end 结束
    var allEnd = false   // 整个tween链表结束
    var target: View? = null  // 指向下一个tween
    var nextTween: UITween? = null

    var headTween: UITween = this

    abstract fun execute(dt: Float)
    abstract fun clone():UITween

    open fun initialize(node:View){}

    fun runBy(pTarget: View,tweenModel: UITweenModel) {

        val head = headTween!!
        head.target = pTarget

        // 当前tween 相当于tween链表的最后一个位置
        // 所以 需要找到当前 tween 链表的 head,然后加入到 tweenManager中,并且将target赋值给 表头
        // 将这个加入到  scene 的  tweenMgr中
//        val curScene = Director.instance.curScene!!
//        curScene.tweenManager.addTween(head)
        tweenModel.tweenManager.addTween(head)
    }
}

fun UITween.cloneTween():UITween{
    // tween 其实是一个链表
    val newHead:UITween = headTween.clone()
    var newCur = newHead
    var cur = headTween.nextTween
    var tmpTween:UITween
    while (cur != null){
        tmpTween = cur.clone()
        newCur.nextTween = tmpTween
        newCur.headTween = newHead
        newCur = tmpTween
        cur = cur.nextTween
    }
    return newHead
}
